/* 1.引入文件 */
import axios from 'axios'        //引入 axios库
import moment from "moment";
import lodash from 'lodash'
// import { isArray } from 'core-js/core/array';
// import qs from 'qs'              //引入 node中自带的qs模块（数据格式转换）

/* 2.全局默认配置 */
// let baseURL = "http://192.168.110.115:8800/"
let baseURL = "http://110.42.251.49:8001/"
// let baseURL = "http://192.168.101.7:8800/"
// 判断开发环境（一般用于本地代理）
// if (process.env.NODE_ENV === 'development') { // 开发环境
//     baseURL = '/api'    // 你设置的本地代理请求（跨域代理），下文会详细介绍怎么进行跨域代理
// } else {                                      // 编译环境
//     if (process.env.type === 'test') {        // 测试环境
//         baseURL = 'http://sw.apitest.com'
//     } else {                                  // 正式环境
//         baseURL = 'http://sw.api.com'
//     }
// }
// 配置axios的属性
axios.defaults.timeout = 6000;    // 请求超时时间1分钟                  
axios.defaults.baseURL = baseURL; // 你的接口地址 
axios.defaults.responseType = "json";
axios.defaults.withCredentials = false;  //是否允许带cookie这些


/*你也可以创建一个实例，然后在实例中配置相关属性，此方法和上面的方法一样，写法不同，怎么用随个人
*喜好，我比较喜欢用这种方法，如下：
*/
const Axios = axios.create({
    baseURL: baseURL, 		      // 后台服务地址
    timeout: 60000, 		      // 请求超时时间1分钟
    responseType: "json",
    withCredentials: false    // 是否允许带cookie这些
});

/* 3.设置拦截器 */
/*如果不是用创建实例的方式配置，那么下面的Axios都要换成axios,也就是文件开头你用import引入axios
时定义的变量*/
Axios.interceptors.request.use((config) => {
    // console.log(config)
    config.params = lodash.pickBy(config.params, item => item);
    if (config.url === '/api/user/login/') {
        return config;
    }
    const token = window.localStorage.getItem('token');

    if (token) {
        config.headers.Authorization = 'JWT1 ' + token;
    }
    // 放行
    return config;

}, err => {
    console.log(err);
})
//     //发送请求前进行拦截
//     //  可在此处配置请求头信息
// 	// config.headers["appkey"] ="...";
// 	// config.headers["token"] ="...";
//    if (config.method == "post") {
//   /*数据转换: axios post方式默认是json格式提交数据，如果使用application/x-www-form-urlencoded数据格式提交，要用qs.stringify()进行转换,个人建议不在拦截器中全局配置，因为不够灵活，还有一点是，如果
// 设置了重新请求的配置，那么重新请求时，请求体中的config里面的传参就会被再次进行qs.stringify()转
// 换，会使得参数丢失，造成请求失败。*/
//       config.data = qs.stringify(config.data)
//    }
// 	return config;
//   },(error) =>{
//     //console.log("错误的传参", 'fail');
//     return Promise.reject(error)
//   })

function momentData(result) {
    result.forEach((res) => {
        if (res.create_time != undefined) {
            res.create_time = moment(res.create_time).format('YYYY-MM-DD HH:mm:ss')
        }
        if (res.update_time != undefined) {
            res.update_time = moment(res.update_time).format('YYYY-MM-DD HH:mm:ss')
        }
    })
    return result
}


Axios.interceptors.response.use((res) => {
    //请求响应后拦截
    if (res.status == 200) {                       // 对响应数据做些事
        //alert("提交成功")
        if (res.data.data != undefined && Array.isArray(res.data.data)) {
            momentData(res.data.data)
        }
        return Promise.resolve(res)
    }

    return res;
}, (error) => {
    error = "服务异常"
    //alert("网络异常!") 404等问题可以在这里处理
    return Promise.reject(error)
})
export default Axios 